home *** CD-ROM | disk | FTP | other *** search
/ SPACE 2 / SPACE - Library 2 - Volume 1.iso / apps / 6 / applic / perpcal.c < prev    next >
Encoding:
C/C++ Source or Header  |  1985-11-19  |  6.6 KB  |  200 lines

  1. /*              P e r p e t u a l   C a l e n d a r            
  2.  
  3.                ChicagoLand Atari Users Group,  SIG*ST        /*              P e r p e t u a l   C a l e n d a r            
  4.  
  5.                ChicagoLand Atari Users Group,  SIG*ST                   
  6.                     L. M. Buldak,  January 1986                         
  7.  
  8.  
  9.  
  10.      Released to the Public Domain for educational purposes by CL.A.U.G 
  11.                                                                      */
  12. #include "obdefs.h"
  13. #include "define.h"
  14. #include "gemdefs.h"
  15. #include "osbind.h"
  16. #include "stdio.h"
  17. #include "portab.h"
  18. /*                                                                   */
  19. main()
  20. {
  21.       char ch_save;
  22.       int day, i, day_no;
  23.       float m, m1, d, y, jul;
  24.       float gf(), julmdy(), djul(), mjul(), yjul();
  25.  
  26.       while (1 == 1) {
  27.            printf("\nEnter the month, then hit SPACEBAR, not <CR>");
  28.            printf("\nWhat month? 1 - 12 (type 0 to quit): ");
  29.            scanf("%f", &m);           /* get the month from console */
  30.            ch_save = getchar();       /* save the space bar character*/
  31.            if (m <= 0) break;         /* end prog if month <= zero  */
  32.            if (m >= 13) break;        /* accept only 1 - 12 or quit */
  33.            printf("\n");              /* new line please.......*/
  34.            printf("\nEnter the year, then hit SPACEBAR, not <CR>");
  35.            printf("\nWhat year do you want the calendar for?: ");
  36.            scanf("%f", &y);           /* get the year from console  */    
  37.            ch_save = getchar();       /* save the space bar character*/
  38.            printf("\n");              /* new line please.......*/
  39.            title(m, y);               /* get month from table       */
  40.            printf("%4.0f\n", y);      /* display the year */
  41.            printf("\n SU  M TU  W TH  F SA\n"); /*display day hdgs */
  42.            dashes(22);                /*execute dashes() function */
  43.            printf("\n");              /* skip a line */
  44.            d = 1;                     /* set d to one */
  45.            day_no = 1;                /* use int day vs. float d */
  46.            m1 = m;                    /* set m1 to month entered */
  47.            jul = julmdy(m, d, y);     /* execute julmdy() function*/
  48.            day = dow(jul);            /* execute dow() func*/
  49.            for (i = 0; i < day; ++i) printf("   "); /*set 1st day*/
  50.            while (m1 == m) {          /* do loop to get days */
  51.                 printf(" %2d", day_no); /*prnt int day of week */
  52.                 if (day == 6) printf("\n"); /*nu-line if 7 days*/
  53.                 jul = jul + 1;     /* increment the julian day */
  54.                 m1 = mjul(jul);       /* get julian month      */
  55.                 day = dow(jul);    /* get day of the week      */
  56.                 ++day_no;          /* increment calendar day   */
  57.            }
  58.            printf("\n");
  59.      }
  60. }
  61. /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
  62. /*           M O N T H   N A M E   T A B L E                 */
  63. title(m, y)
  64. float m, y;
  65. {
  66.      int month;
  67.      month = m;
  68.      printf("\n    ");
  69.      switch (month) {
  70.      case 1:  printf("  January ");
  71.               break;
  72.      case 2:  printf(" February ");
  73.               break;
  74.      case 3:  printf("   March  ");
  75.               break;
  76.      case 4:  printf("   April  ");
  77.               break;
  78.      case 5:  printf("    May   ");
  79.               break;
  80.      case 6:  printf("   June   ");
  81.               break;
  82.      case 7:  printf("   July   ");
  83.               break;
  84.      case 8:  printf(" August   ");
  85.               break;
  86.      case 9:  printf("September ");
  87.               break;
  88.      case 10: printf(" October  ");
  89.               break;
  90.      case 11: printf(" November ");
  91.               break;
  92.      case 12: printf(" December ");
  93.               break;
  94.      }
  95. }
  96. /* * * * * * * * * * * * * * * * * * * * * * * * * * * * */
  97. /* return the day of the week                            */
  98. dow(jul)
  99. float jul;
  100. {
  101.      int day;
  102.      float dayno, dw;
  103.      double floor(), fval, x;
  104.      dayno = jul - 1720982;
  105.      dw = (dayno + 5)/7;
  106.      fval = dw;
  107.      x = dw - floor(fval);
  108.      day = 7*x + 0.5;
  109.      return day;
  110. }
  111. /* * * * * * * * * * * * * * * * * * * * * * * * * * * * */
  112. /* julmdy()  - - Convert Date to Julian Day Number    */
  113. float julmdy(m, d, y)
  114. float m, d, y;
  115. {
  116.      float jul, m1, y1;
  117.      double floor(), x, z, fval;
  118.      if (m > 2) {
  119.           m1 = m + 1;
  120.           y1 = y;
  121.      }
  122.      else {
  123.           m1 = m + 13;
  124.           y1 = y - 1;
  125.      }
  126.      fval = 365.25 * y1;
  127.      x = floor(fval);
  128.      fval = 30.6001 * m1;
  129.      z = floor(fval);
  130.      jul = x + z + d + 1720982;
  131.      return jul;
  132. }
  133. /* * * * * * * * * * * * * * * * * * * * * * * * * * * */
  134. /*  djul() - - Convert Julian Day Number to Date       */
  135. float djul(jul)
  136. float jul;
  137. {
  138.      float dayno, m, d, y;
  139.      double floor(), x, z, fval;
  140.      dayno = jul - 1720982;
  141.      fval = ((dayno - 122.1)/365.35);
  142.      y = floor(fval);
  143.      fval = 365.25 * y;
  144.      x = ((dayno - floor(fval))/30.6001);
  145.      m = floor(x);
  146.      fval = 365.25 * y;
  147.      x = floor(fval);
  148.      fval = 30.6001 * m;
  149.      z = floor(fval);
  150.      d = dayno - x - z;
  151.      return d;
  152. }
  153. /* * * * * * * * * * * * * * * * * * * * * * * * * * * * */
  154. /*                                                       */
  155. float mjul(jul)
  156. float jul;
  157. {
  158.      float dayno, m, d, y;
  159.      double floor(), x, z, fval;
  160.      dayno = jul - 1720982;
  161.      fval = ((dayno - 122.1)/365.25);
  162.      y = floor(fval);
  163.      x = 365.25 * y;
  164.      fval = ((dayno - floor(x))/30.6001);
  165.      m = floor(fval);
  166.      if (m < 14) m = m - 1;
  167.      else m = m -13;
  168.      return m;
  169. }
  170. /* * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 
  171. /*                                                       */
  172. float yjul(jul)
  173. float jul;
  174. {
  175.      float dayno, m, d, y;
  176.      double floor(), z, x, fval;
  177.      dayno = jul - 1720982;
  178.      fval = ((dayno - 122.1)/365.25);
  179.      y = floor(fval);
  180.      fval = (365.25 * y);
  181.      z = floor(fval);
  182.      fval = ((dayno - z)/30.6001);
  183.      m = floor(fval);
  184.      if (m < 14) m = m - 1;
  185.      else m = m - 13;
  186.      if (m < 3) y = y + 1;
  187.      return y;
  188. }   
  189. /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
  190. /*  D A S H E S   U T I L I T Y  */
  191. dashes(n)
  192. int n;
  193. {
  194.      int i;
  195.      for (i = 0; i < n; i = i + 1) printf("-");
  196. /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
  197. /*               T H A T ' S   A L L   F O L K S           */
  198. /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
  199. }
  200. ②②②②②②②②②②②②②②②②②②②②②②②②②②②②②②②②②②②②②②②②②②②②②②②②②②②②②②②②②②②②②②②②②②②②②②②②②②②②②②②②②②②②②②②②②②②②②②②②②②②②②②②②②②②②②②